package com.spark.sql

import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SparkSession}

/**
  *
  * @author Pop
  * @date 2022/5/16 21:31
  */
object Spark01_SparkSQL_Basic {

  def main(args: Array[String]): Unit = {
    System.setProperty("hadoop.home.dir","H:\\hadoop")
    // 创建sparksql的运行环境
    val sparkConfig = new SparkConf()
      .setMaster("local[*]").setAppName("sp")

    val  spark = SparkSession.builder().config(sparkConfig).getOrCreate()

    // 执行逻辑操作

    //RDD

    //DataFrame
    val df: DataFrame = spark.read.json("datas/user.json")
//    frame.show();

    // 我们来创建一个视图，类似表,视图只能查不能改
    df.createOrReplaceTempView("user")
//    spark.sql("select * from user").show()
//    spark.sql("select age,username from user").show()
//    spark.sql("select avg(age) from user").show()

    //DSL
    // 在使用dataframe时候，如果涉及到转换操作，需要引入转换规则
    // 例如如下的需要对年龄进行+1，这里没办法直接使用$来计算，所以要引入隐式转换
    /**
      * 请注意，这里的spark是变量，而不是包名
      */
    import spark.implicits._
    df.select("age","username").show()
    df.select($"age"+1).show()
    df.select('age+1).show()

    //DataSet

    // 关闭运行环境
    spark.close();
  }

}
